package com.soulless.annotation;

import java.lang.annotation.Annotation;
import java.util.Arrays;

/**
 * <p>
 * 注解与反射机制
 * </p>
 *
 * @author zenglei
 * @date 2022/04/22/ 15:49
 */
@DocumentB
public class AnnotationDemo2 extends A2 {

    public static void main(String... args) {

        Class<?> clazz = AnnotationDemo2.class;
        //根据指定注解类型获取该注解
        DocumentA documentA = clazz.getAnnotation(DocumentA.class);
        System.out.println("根据指定注解类型获取该注解:" + documentA);

        //获取该元素上的所有注解，包含从父类继承
        Annotation[] an = clazz.getAnnotations();
        System.out.println("取该元素上的所有注解，包含从父类继承:" + Arrays.toString(an));
        //获取该元素上的所有注解，但不包含继承！
        Annotation[] an2 = clazz.getDeclaredAnnotations();
        System.out.println("获取该元素上的所有注解，但不包含继承:" + Arrays.toString(an2));

        //判断注解DocumentA是否在该元素上
        boolean b = clazz.isAnnotationPresent(DocumentA.class);
        System.out.println("判断注解DocumentA是否在该元素上:" + b);

        /**
         * 执行结果:
         根据指定注解类型获取该注解:@com.soulless.annotation.DocumentA()
         取该元素上的所有注解，包含从父类继承:[@com.soulless.annotation.DocumentA(), @com.soulless.annotation.DocumentB()]
         获取该元素上的所有注解，但不包含继承:[@com.soulless.annotation.DocumentB()]
         判断注解DocumentA是否在该元素上:true
         */
    }

}

@DocumentA
class A2 {
}